#ifndef _DATABASE_MANAGET_H
#define _DATABASE_MANAGET_H

#include<sqlite3.h> // 数据库的头文件
#include<string>
#include<mutex> // 互斥锁头文件
#include<memory> // 智能指针头文件

using namespace std;
class DatabaseManager
{
private:
    // 数据库指针
    sqlite3 *user_db_, *dict_db_;
    // 互斥锁
    std::mutex user_mutex_, dict_mutex_;

    /// @brief 初始化用户数据库
    /// @return 成功返回true，失败返回false
    bool initUserDataBase();

    /// @brief 初始化单词数据库
    /// @return 成功返回true, 失败返沪false
    bool initDiaDataBase();

    /// @brief 导入单词数据
    /// @return 成功返回true，失败返回false
    bool dicToDataBase();

public:
    // 构造函数，需要外部传入用户库的路径以及单词库的路径
    DatabaseManager(const std::string& user_db_name, const std::string& dict_db_name);
    ~DatabaseManager();

    
    /// @brief 创建数据表，并且导入单词库
    /// @return 成功返回true，失败返回false
    bool initTables();

    // 用户相关的操作
    /// @brief 用户注册操作
    /// @param name 用户的昵称
    /// @param password 用户的密码
    /// @return 成功返回true，失败返回false
    bool registerUser(const string& name, const string& password);

    /// @brief 用户登录操作
    /// @param name 昵称
    /// @param password 密码
    /// @param is_online 是否在线
    /// @return 成功返回true，失败返回false
    bool loginUser(const string &name, const string &password, bool &is_online);

    /// @brief 用户登出操作
    /// @param name 用户的昵称
    /// @return 成功返回true，失败返回false
    bool logoutUser(const string &name);

    /// @brief 查询单词
    /// @param word 单词的英文
    /// @param meaning 单词的翻译
    /// @return 成功返回true，失败返回false
    bool queryWord(const string &word, string &meaning);

    /// @brief 添加一条历史记录
    /// @param name 用户的昵称
    /// @param word 单词的英文
    /// @param meading 单词的中文
    /// @param time 查询的时间
    /// @return 成功返回true，失败返回false
    bool recordHistory(const string &name, const string &word, const string &meading, const string &time);

    /// @brief 获取历史记录
    /// @param name 昵称
    /// @param history 回调历史记录的参数
    /// @return 成功返回true，失败返回false
    bool getHistory(const string& name, string& history);
};



#endif
